﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Xml.Serialization;

namespace EpsiRisk.DonneesPlateau
{
    [XmlType]
    public class ClassDe
    {
        //VARIABLES
        public event EventHandler valeurApparenteModifiee;

        [XmlIgnore]
        public AutoResetEvent finRoulement;

        [XmlAttribute("Valeur")]
        public int valeur = 1;

        [XmlAttribute("Valeur Apparente")]
        public int valeurApparente = 1;

        private static Random randomize = new Random();


        /// <summary>
        /// couleur du dé, bleu ou rouge
        /// </summary>
        public string couleur;

        private Thread roulement;

        public ClassDe(string color)
        {
            couleur = color;
            finRoulement = new AutoResetEvent(false);
        }

        //METHODES

        private void rouler()
        {
            lock (this)
            {
                finRoulement.Reset();
                for (int i = 0; i < 20; i++)
                {
                    valeurApparente = randomize.Next(1, 6);
                    valeurApparenteModifiee.Invoke(this, new EventArgs());
                    Thread.Sleep(250);
                }
                valeurApparente = valeur;
                valeurApparenteModifiee.Invoke(this, new EventArgs());
                finRoulement.Set();
            }
        }

        public int Lancer()
        {
            //randomize = new Random();
            valeur = randomize.Next(1, 6);
            roulement = new Thread(new ThreadStart(rouler));
            roulement.Start();
            Console.WriteLine("Dé lancé : valeur resultante =" + valeur.ToString());
            return valeur;
        }
    }
}
